#pragma once
#ifndef SMPPALERTNOTIFICATION_HPP
#define SMPPALERTNOTIFICATION_HPP

#include "SMPPHeader.hpp"
#include "SMPPMsAvailabilityStatus.hpp"

namespace smpp {
namespace pdu{
	class SMPP_DLLPRFX AlertNotification: public Header{
		quint8 _SourceAddrTON;
		quint8 _SourceAddrNPI;
		CoctetString _SourceAddr;
		quint8 _ESMEAddrTON;
		quint8 _ESMEAddrNPI;
		CoctetString _ESMEAddr;
		MsAvailabilityStatus *_MsAvailabilityStatus;
	public:
		AlertNotification(const Header &,
			const quint8 nSourceAddrTON = 0,
			const quint8 nSourceAddrNPI = 0, 
			const CoctetString &nSourceAddr = "",
			const quint8 nESMEAddrTON = 0, 
			quint8 nESMEAddrNPI = 0,
			const CoctetString &nESMEAddr = "",
			const MsAvailabilityStatus *nMsAvailabilityStatus = 0);

		AlertNotification(const AlertNotification &);

		~AlertNotification();

		bool operator ==(const AlertNotification &) const;

		bool operator !=(const AlertNotification &) const;

		AlertNotification &operator =(const AlertNotification &);

		void setSourceAddrTON(const quint8);

		const quint8 getSourceAddrTON() const;

		void setSourceAddrNPI(const quint8);

		const quint8 getSourceAddrNPI() const;

		void setSourceAddr(const CoctetString &);

		const CoctetString &getSourceAddr() const;

		void setESMEAddrTON(const quint8);

		const quint8 getESMEAddrTON() const;

		void setESMEAddrNPI(const quint8);

		const quint8 getESMEAddrNPI() const;

		void setESMEAddr(const CoctetString &);

		const CoctetString &getESMEAddr() const;

		void setMsAvailabilityStatus(const MsAvailabilityStatus *);

		const MsAvailabilityStatus *getMsAvailabilityStatus() const;

		void calcCommandLength();
	};
}
}

#endif
